Spring直接提供了很多Resource的实现:

7.3.1 UrlResource

UrlResource封装了一个java.net.URL,可用于访问任何通常可通过URL访问的对象,如文件,HTTP目标,FTP目标等。所有URL都有一个标准化的字符串表示形式,用适当的标准化前缀来区分另一个URL类型。这包括,file:用来访问文件系统,http:用来通过http访问资源。ftp:用来通过ftp访问资源等。
UrlResource可以在Java代码里用UrlResource构造函数显式创建,但是你调用一个接受String参数的API方法时,通常会隐式地创建UrlResource来表示路径。对于后者,一个JavaBean的PropertyEditor 将最终决定去创建那种Resource。如果路径字符串包含一些众所周知的前缀,比如classpath:,它将为该前缀创建适当的专用资源。 但是,如果它不能识别前缀,它会认为这是一个标准的URL字符串,并会创建一个UrlResource

7.3.2 ClasspathResource

这个代表了一个可以从类路径中加载的资源,它使用线程上下文加载器,指定的类加载器或者是指定类的加载器来加载资源。
如果类路径资源在文件系统,那么ClasspathResource支持将资源解析成java.io.File。但对于不在文件系统中且未被(任何servel引擎或是任何环境)解压到文件系统下的类路径的资源则不行。为了解决这个问题,各种Resource实现总是支持解析为java.net.URL
ClassPathResource由Java代码使用ClassPathResource构造函数显式创建,但是当您调用一个带有表示路径的String参数的API方法时,通常会隐式地创建ClassPathResource。 对于后一种情况,JavaBeans PropertyEditor将识别字符串路径上的特殊前缀classpath:并创建一个ClassPathResource

7.3.3 FileSystem Resource

该实现是为了支持java.io.File的句柄。 它支持讲资源解析为一个文件,或是作为一个URL。

7.3.4 ServletContext Resource

该实现是针对ServletContext的资源,用来解析相对路径在web应用程序的位置。
它支持流访问和URL访问,但只有在Web应用程序压缩文件被解压并且该资源物理上存在于文件系统上时才允许被解析java.io.File。 实际上不管它是否被扩展或是存在文件系统上,还是直接从JAR或其他地方访问比如从DB(可以想象),都依赖于Servlet容器。

7.3.5 InputStreamResource

该实现针对给定的InputStream。只有在没有其他适用的资源实现的情况下才使用。在可能的情况下,首选ByteArrayResource或任何基于文件的资源的特殊的实现。
与其他资源实现相比,这是已打开资源的描述符,因此从isOpen()返回true。 如果您需要将资源描述符保存在某处,或者需要多次读取流,请不要使用它。

7.3.6 ByteArrayResource

该资源实现针对字节数组。 它为给定的字节数组创建一个ByteArrayInputStream。
从任意给定的字节数组读取资源的时候,这很有,而不再需要借助只能使用一次的InputStreamResource